Application servers are platforms that host and provide services to applications. Application servers manage the life cycles of applications and take care that the logic implemented in applications is accessible to clients in a centralized fashion. Applications running on a server consume a multitude of resources. These include, but are not limited to, main memory resources, central processing unit (hereinafter “CPU”) resources, database connections, and so on. These resources are critical for the performance of the application server. Consequently, the higher the number of running applications on a server, the higher load the application server has to processes with less resources. Usually business scenarios involve complex information technology landscapes with thousands of applications deployed on an application server. However, at any given time, only a small subset of these applications is used. Thus, if the application server can start only the applications that are needed at a given point of time, it will be able to optimize the use of resources and distribute them as they are needed.
To access an application on a Java application server, a client obtains the application by performing a lookup operation via the Java Naming and Directory Interface (hereinafter “JNDI”). However, applications are bound to the JNDI on application startup. Thus, if an application is not running, a client will not be able to look it up. This implies that at any given time all applications must be running so that in the event a client wants to use them, the client will be able to look them up. Running thousands of applications on a server can result in system downtime due to the lack of critical system resources.